}
static void
-item_value_changed (GtkListItem *item,
- GtkEntry *entry)
+item_value_changed (GtkEditableLabel *label,
+ GParamSpec *pspec,
+ GtkListItem *item)
{
SettingsKey *self;
const char *text;
GVariant *variant;
GError *error = NULL;
const char *name;
+ char *value;
- text = gtk_editable_get_text (GTK_EDITABLE (entry));
+ text = gtk_editable_get_text (GTK_EDITABLE (label));
g_object_get (item, "item", &self, NULL);
g_object_unref (self);
{
g_warning ("%s", error->message);
g_clear_error (&error);
- return;
+ goto revert;
}
if (!g_settings_schema_key_range_check (self->key, variant))
{
g_warning ("Not a valid value for %s", name);
- return;
+ goto revert;
}
g_settings_set_value (self->settings, name, variant);
g_variant_unref (variant);
+ return;
+
+revert:
+ gtk_widget_error_bell (GTK_WIDGET (label));
+
+ g_object_get (self, "value", &value, NULL);
+ gtk_editable_set_text (GTK_EDITABLE (label), value);
+ g_free (value);
}
static int
<interface>
<template class="GtkListItem">
<property name="child">
- <object class="GtkEntry">
- <signal name="activate" handler="item_value_changed" object="GtkListItem" swapped="yes"/>
- <property name="xalign">0</property>
- <binding name="text">
+ <object class="GtkEditableLabel">
+ <binding name="label">
<lookup name="value" type="SettingsKey">
<lookup name="item">GtkListItem</lookup>
</lookup>
</binding>
+ <signal name="notify::label" handler="item_value_changed"/>
</object>
</property>
</template>